# 方式一【编译阶段与运行阶段分离】
# 打包依赖阶段使用golang作为基础镜像
FROM golang:1.18.0 AS builder

# 设置环境变量
ENV GO111MODULE=on  GOPROXY=http://goproxy.cn
# ENV GOROOT=/usr/local/go  PATH=$PATH:/usr/local/go/bin  GOPATH=$HOME/go  PATH=$GOPATH/bin/:$PATH

# 工作目录
WORKDIR /home/www/trident_websocket_server

# 创建用户
RUN adduser -u 8000 app-runner

# 复制文件
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .

# 运行命令【编译代码】
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o trident-ws-srv main.go
# RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -installsuffix cgo -o web_serve main.go

# 运行阶段
FROM alpine:3.17.0 AS final

# 添加时区
RUN apk add --no-cache tzdata
ENV TZ Asia/Shanghai

# 工作目录
WORKDIR /app

# 复制系统文件
COPY --from=builder /etc/passwd /etc/passwd

# 复制编译好的项目二进制文件到运行的目录中
COPY --from=builder /home/www/trident_websocket_server/trident-ws-srv /app/
# 复制项目配置文件到运行的目录中
COPY --from=builder /home/www/trident_websocket_server/config /app/config
# 复制更多文件...

# 修改项目的拥有者
RUN chown -R 8000.8000 /app

# 暴露端口
EXPOSE 8000

# 运行用户
USER app-runner

# 执行命令
ENTRYPOINT [ "/app/trident-ws-srv", "--env", "prod" ]



#################################################################3
# 方式二【构建编译好的项目】
# 基础镜像
# FROM alpine:3.17.0

# 添加时区
# RUN apk add --no-cache tzdata
# ENV TZ Asia/Shanghai

# # 复制项目所有文件到容器目录下
# COPY . /app/api_www_trident_mall

# # 项目工作目录
# WORKDIR /app/api_www_trident_mall

# # 创建用户
# RUN adduser -u 8000 -HD app-runner

# # 修改项目的拥有者
# RUN chown -R 8000.8000 /app

# # 运行用户
# USER app-runner

# # 暴露端口
# EXPOSE 8182

# # 执行命令
# ENTRYPOINT ["/app/api-www-tmall", "--env", "prod"]

